// Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

// Test for named parameter with the name of a JavaScript property found on
// 'Object'.  For such a NAME, foo.NAME may exist in an empty map, i.e.
//    'toString' in {} --> true.


main() {
  // Test properties found on instances of Object in Chrome 15 and Firefox 6.
  test_constructor();
  test___proto__();
  test___defineGetter__();
  test___defineSetter__();
  test___lookupGetter__();
  test___lookupSetter__();
  test___noSuchMethod__();
  test_hasOwnProperty();
  test_isPrototypeOf();
  test_propertyIsEnumerable();
  test_toSource();
  test_toLocaleString();
  test_toString();
  test_unwatch();
  test_valueOf();
  test_watch();
}

// 'constructor' property.

class TestClass_constructor {
  method([constructor]) => constructor;
  static staticMethod([constructor]) => constructor;
}
globalMethod_constructor([constructor]) => constructor;

test_constructor() {
  var obj = new TestClass_constructor();

  Expect.equals(null, obj.method());
  Expect.equals(0, obj.method(constructor: 0));

  Expect.equals(null, TestClass_constructor.staticMethod());
  Expect.equals(0, TestClass_constructor.staticMethod(constructor: 0));

  Expect.equals(null, globalMethod_constructor());
  Expect.equals(0, globalMethod_constructor(constructor: 0));
}

// '__proto__' property.

class TestClass___proto__ {
  method([__proto__]) => __proto__;
  static staticMethod([__proto__]) => __proto__;
}
globalMethod___proto__([__proto__]) => __proto__;

test___proto__() {
  var obj = new TestClass___proto__();

  Expect.equals(null, obj.method());
  Expect.equals(0, obj.method(__proto__: 0));

  Expect.equals(null, TestClass___proto__.staticMethod());
  Expect.equals(0, TestClass___proto__.staticMethod(__proto__: 0));

  Expect.equals(null, globalMethod___proto__());
  Expect.equals(0, globalMethod___proto__(__proto__: 0));
}

// '__defineGetter__' property.

class TestClass___defineGetter__ {
  method([__defineGetter__]) => __defineGetter__;
  static staticMethod([__defineGetter__]) => __defineGetter__;
}
globalMethod___defineGetter__([__defineGetter__]) => __defineGetter__;

test___defineGetter__() {
  var obj = new TestClass___defineGetter__();

  Expect.equals(null, obj.method());
  Expect.equals(0, obj.method(__defineGetter__: 0));

  Expect.equals(null, TestClass___defineGetter__.staticMethod());
  Expect.equals(0, TestClass___defineGetter__.staticMethod(__defineGetter__: 0));

  Expect.equals(null, globalMethod___defineGetter__());
  Expect.equals(0, globalMethod___defineGetter__(__defineGetter__: 0));
}

// '__defineSetter__' property.

class TestClass___defineSetter__ {
  method([__defineSetter__]) => __defineSetter__;
  static staticMethod([__defineSetter__]) => __defineSetter__;
}
globalMethod___defineSetter__([__defineSetter__]) => __defineSetter__;

test___defineSetter__() {
  var obj = new TestClass___defineSetter__();

  Expect.equals(null, obj.method());
  Expect.equals(0, obj.method(__defineSetter__: 0));

  Expect.equals(null, TestClass___defineSetter__.staticMethod());
  Expect.equals(0, TestClass___defineSetter__.staticMethod(__defineSetter__: 0));

  Expect.equals(null, globalMethod___defineSetter__());
  Expect.equals(0, globalMethod___defineSetter__(__defineSetter__: 0));
}

// '__lookupGetter__' property.

class TestClass___lookupGetter__ {
  method([__lookupGetter__]) => __lookupGetter__;
  static staticMethod([__lookupGetter__]) => __lookupGetter__;
}
globalMethod___lookupGetter__([__lookupGetter__]) => __lookupGetter__;

test___lookupGetter__() {
  var obj = new TestClass___lookupGetter__();

  Expect.equals(null, obj.method());
  Expect.equals(0, obj.method(__lookupGetter__: 0));

  Expect.equals(null, TestClass___lookupGetter__.staticMethod());
  Expect.equals(0, TestClass___lookupGetter__.staticMethod(__lookupGetter__: 0));

  Expect.equals(null, globalMethod___lookupGetter__());
  Expect.equals(0, globalMethod___lookupGetter__(__lookupGetter__: 0));
}

// '__lookupSetter__' property.

class TestClass___lookupSetter__ {
  method([__lookupSetter__]) => __lookupSetter__;
  static staticMethod([__lookupSetter__]) => __lookupSetter__;
}
globalMethod___lookupSetter__([__lookupSetter__]) => __lookupSetter__;

test___lookupSetter__() {
  var obj = new TestClass___lookupSetter__();

  Expect.equals(null, obj.method());
  Expect.equals(0, obj.method(__lookupSetter__: 0));

  Expect.equals(null, TestClass___lookupSetter__.staticMethod());
  Expect.equals(0, TestClass___lookupSetter__.staticMethod(__lookupSetter__: 0));

  Expect.equals(null, globalMethod___lookupSetter__());
  Expect.equals(0, globalMethod___lookupSetter__(__lookupSetter__: 0));
}

// '__noSuchMethod__' property.

class TestClass___noSuchMethod__ {
  method([__noSuchMethod__]) => __noSuchMethod__;
  static staticMethod([__noSuchMethod__]) => __noSuchMethod__;
}
globalMethod___noSuchMethod__([__noSuchMethod__]) => __noSuchMethod__;

test___noSuchMethod__() {
  var obj = new TestClass___noSuchMethod__();

  Expect.equals(null, obj.method());
  Expect.equals(0, obj.method(__noSuchMethod__: 0));

  Expect.equals(null, TestClass___noSuchMethod__.staticMethod());
  Expect.equals(0, TestClass___noSuchMethod__.staticMethod(__noSuchMethod__: 0));

  Expect.equals(null, globalMethod___noSuchMethod__());
  Expect.equals(0, globalMethod___noSuchMethod__(__noSuchMethod__: 0));
}

// 'hasOwnProperty' property.

class TestClass_hasOwnProperty {
  method([hasOwnProperty]) => hasOwnProperty;
  static staticMethod([hasOwnProperty]) => hasOwnProperty;
}
globalMethod_hasOwnProperty([hasOwnProperty]) => hasOwnProperty;

test_hasOwnProperty() {
  var obj = new TestClass_hasOwnProperty();

  Expect.equals(null, obj.method());
  Expect.equals(0, obj.method(hasOwnProperty: 0));

  Expect.equals(null, TestClass_hasOwnProperty.staticMethod());
  Expect.equals(0, TestClass_hasOwnProperty.staticMethod(hasOwnProperty: 0));

  Expect.equals(null, globalMethod_hasOwnProperty());
  Expect.equals(0, globalMethod_hasOwnProperty(hasOwnProperty: 0));
}

// 'isPrototypeOf' property.

class TestClass_isPrototypeOf {
  method([isPrototypeOf]) => isPrototypeOf;
  static staticMethod([isPrototypeOf]) => isPrototypeOf;
}
globalMethod_isPrototypeOf([isPrototypeOf]) => isPrototypeOf;

test_isPrototypeOf() {
  var obj = new TestClass_isPrototypeOf();

  Expect.equals(null, obj.method());
  Expect.equals(0, obj.method(isPrototypeOf: 0));

  Expect.equals(null, TestClass_isPrototypeOf.staticMethod());
  Expect.equals(0, TestClass_isPrototypeOf.staticMethod(isPrototypeOf: 0));

  Expect.equals(null, globalMethod_isPrototypeOf());
  Expect.equals(0, globalMethod_isPrototypeOf(isPrototypeOf: 0));
}

// 'propertyIsEnumerable' property.

class TestClass_propertyIsEnumerable {
  method([propertyIsEnumerable]) => propertyIsEnumerable;
  static staticMethod([propertyIsEnumerable]) => propertyIsEnumerable;
}
globalMethod_propertyIsEnumerable([propertyIsEnumerable]) => propertyIsEnumerable;

test_propertyIsEnumerable() {
  var obj = new TestClass_propertyIsEnumerable();

  Expect.equals(null, obj.method());
  Expect.equals(0, obj.method(propertyIsEnumerable: 0));

  Expect.equals(null, TestClass_propertyIsEnumerable.staticMethod());
  Expect.equals(0, TestClass_propertyIsEnumerable.staticMethod(propertyIsEnumerable: 0));

  Expect.equals(null, globalMethod_propertyIsEnumerable());
  Expect.equals(0, globalMethod_propertyIsEnumerable(propertyIsEnumerable: 0));
}

// 'toSource' property.

class TestClass_toSource {
  method([toSource]) => toSource;
  static staticMethod([toSource]) => toSource;
}
globalMethod_toSource([toSource]) => toSource;

test_toSource() {
  var obj = new TestClass_toSource();

  Expect.equals(null, obj.method());
  Expect.equals(0, obj.method(toSource: 0));

  Expect.equals(null, TestClass_toSource.staticMethod());
  Expect.equals(0, TestClass_toSource.staticMethod(toSource: 0));

  Expect.equals(null, globalMethod_toSource());
  Expect.equals(0, globalMethod_toSource(toSource: 0));
}

// 'toLocaleString' property.

class TestClass_toLocaleString {
  method([toLocaleString]) => toLocaleString;
  static staticMethod([toLocaleString]) => toLocaleString;
}
globalMethod_toLocaleString([toLocaleString]) => toLocaleString;

test_toLocaleString() {
  var obj = new TestClass_toLocaleString();

  Expect.equals(null, obj.method());
  Expect.equals(0, obj.method(toLocaleString: 0));

  Expect.equals(null, TestClass_toLocaleString.staticMethod());
  Expect.equals(0, TestClass_toLocaleString.staticMethod(toLocaleString: 0));

  Expect.equals(null, globalMethod_toLocaleString());
  Expect.equals(0, globalMethod_toLocaleString(toLocaleString: 0));
}

// 'toString' property.

class TestClass_toString {
  method([toString]) => toString;
  static staticMethod([toString]) => toString;
}
globalMethod_toString([toString]) => toString;

test_toString() {
  var obj = new TestClass_toString();

  Expect.equals(null, obj.method());
  Expect.equals(0, obj.method(toString: 0));

  Expect.equals(null, TestClass_toString.staticMethod());
  Expect.equals(0, TestClass_toString.staticMethod(toString: 0));

  Expect.equals(null, globalMethod_toString());
  Expect.equals(0, globalMethod_toString(toString: 0));
}

// 'unwatch' property.

class TestClass_unwatch {
  method([unwatch]) => unwatch;
  static staticMethod([unwatch]) => unwatch;
}
globalMethod_unwatch([unwatch]) => unwatch;

test_unwatch() {
  var obj = new TestClass_unwatch();

  Expect.equals(null, obj.method());
  Expect.equals(0, obj.method(unwatch: 0));

  Expect.equals(null, TestClass_unwatch.staticMethod());
  Expect.equals(0, TestClass_unwatch.staticMethod(unwatch: 0));

  Expect.equals(null, globalMethod_unwatch());
  Expect.equals(0, globalMethod_unwatch(unwatch: 0));
}

// 'valueOf' property.

class TestClass_valueOf {
  method([valueOf]) => valueOf;
  static staticMethod([valueOf]) => valueOf;
}
globalMethod_valueOf([valueOf]) => valueOf;

test_valueOf() {
  var obj = new TestClass_valueOf();

  Expect.equals(null, obj.method());
  Expect.equals(0, obj.method(valueOf: 0));

  Expect.equals(null, TestClass_valueOf.staticMethod());
  Expect.equals(0, TestClass_valueOf.staticMethod(valueOf: 0));

  Expect.equals(null, globalMethod_valueOf());
  Expect.equals(0, globalMethod_valueOf(valueOf: 0));
}

// 'watch' property.

class TestClass_watch {
  method([watch]) => watch;
  static staticMethod([watch]) => watch;
}
globalMethod_watch([watch]) => watch;

test_watch() {
  var obj = new TestClass_watch();

  Expect.equals(null, obj.method());
  Expect.equals(0, obj.method(watch: 0));

  Expect.equals(null, TestClass_watch.staticMethod());
  Expect.equals(0, TestClass_watch.staticMethod(watch: 0));

  Expect.equals(null, globalMethod_watch());
  Expect.equals(0, globalMethod_watch(watch: 0));
}
